<script>
  /**
   * 双指针
   * l = 0 r = 字符的长度
   * 写一个校验函数 判断是否为 大写字母 小写字母 数字 通过ascll码确认
   * 判断不符合 就 缩减范围
   * 最后依次 判断 首尾是否一样 考虑不区分大小写 我们转成小写 比较 即可
   */

  /**
   * @param {string} s
   * @return {boolean}
   */
  function isValid(val) {
    if (
      // 大写字母
      (val >= 97 && val <= 122) ||
      // 小写字母
      (val >= 65 && val <= 90) ||
      // 数字
      (val >= 48 && val <= 57)
    ) {
      return true;
    }
    return false;
  }
  var isPalindrome = function (s) {
    let l = 0,
      r = s.length - 1;
    while (l < r) {
      let ch1 = s.charCodeAt(l),
        ch2 = s.charCodeAt(r);
      if (!isValid(ch1)) {
        l++;
      } else if (!isValid(ch2)) {
        r--;
      } else {
        ch1 = s[l].toLowerCase();
        ch2 = s[r].toLowerCase();
        if (ch1 != ch2) {
          return false;
        }
        l++;
        r--;
      }
    }
    return true;
  };
</script>
